package com.example.springboot.service.impl;

import com.example.springboot.common.vo.TreeMenu;
import com.example.springboot.dao.SysMenuDao;
import com.example.springboot.dao.SysRoleDao;
import com.example.springboot.entity.SysMenu;
import com.example.springboot.entity.SysRole;
import com.example.springboot.service.SysRoleService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * (SysRole)表服务实现类
 *
 * @author makejava
 * @since 2021-09-06 11:55:40
 */
@Service("sysRoleService")
public class SysRoleServiceImpl implements SysRoleService {
	@Resource
	private SysRoleDao sysRoleDao;
	@Resource
	private SysMenuDao sysMenuDao;

	@Override
	public SysRole queryByName(String name) {
		return this.sysRoleDao.queryByName(name);
	}

	/**
	 * 通过ID查询单条数据
	 *
	 * @param id 主键
	 * @return 实例对象
	 */
	@Override
	public SysRole queryById(Long id) {
		return this.sysRoleDao.queryById(id);
	}

	/**
	 * 查询多条数据
	 *
	 * @param offset 查询起始位置
	 * @param limit  查询条数
	 * @return 对象列表
	 */
	@Override
	public List<SysRole> queryAllByLimit(int offset, int limit) {
		return this.sysRoleDao.queryAllByLimit(offset, limit);
	}

	@Override
	public List<TreeMenu> queryTreeMenu(Long id) {

		List<SysMenu> menuList = this.sysMenuDao.queryAll(null);

		List<TreeMenu> treeMenuList = TreeMenu.TreeBuild(menuList, 0L);
		return treeMenuList;
	}

	/**
	 * 新增数据
	 *
	 * @param sysRole 实例对象
	 * @return 实例对象
	 */
	@Override
	public SysRole insert(SysRole sysRole) {
		if (sysRoleDao.queryByName(sysRole.getName()) != null) {
			return null;
		}

		sysRole.setStatus(1);
		sysRole.setCreatedate(new Date());
		int count = this.sysRoleDao.insert(sysRole);

		if (count == 0) {
			sysRole = null;
		}
		return sysRole;
	}

	/**
	 * 修改数据
	 *
	 * @param sysRole 实例对象
	 * @return 实例对象
	 */
	@Override
	public boolean update(SysRole sysRole) {
		sysRole.setModifydate(new Date());
		return this.sysRoleDao.update(sysRole) == 1;
	}

	/**
	 * 通过主键删除数据
	 *
	 * @param id 主键
	 * @return 是否成功
	 */
	@Override
	public boolean deleteById(Long id) {
		return this.sysRoleDao.deleteById(id) > 0;
	}
}